home *** CD-ROM | disk | FTP | other *** search
/ Macintosh Technology Seed 1996 September / Macintosh Technology Seed (September 1996) (CDRM1437020).ISO / pc / qd3d15d6 / 15d6_sdk.exe / QD3D Win32 1.5d6 / Interfaces / QD3DExtension.h < prev    next >
C/C++ Source or Header  |  1996-08-21  |  10KB  |  312 lines

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DExtension.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     QuickDraw 3D Plug-in Architecture                         **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1996 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DExtension_h
  15. #define QD3DExtension_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DErrors.h"
  22.  
  23. #if defined(THINK_C) || defined(__SC__)
  24.     #pragma options(!pack_enums, !align_arrays)
  25.     #pragma SC options align=power
  26. #elif defined(__MWERKS__)
  27.     #pragma enumsalwaysint on
  28.     #pragma align_array_members off
  29.     #pragma options align=native
  30. #elif defined(__PPCC__)
  31.     #pragma options align=power
  32. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  33.     #pragma options enum=int
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif  /* __cplusplus  */
  39.  
  40. /******************************************************************************
  41.  **                                                                             **
  42.  **                                Constants                                      **
  43.  **                                                                             **
  44.  *****************************************************************************/
  45.  
  46. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  47.  
  48. #define kQ3XExtensionMacCreatorType        Q3_OBJECT_TYPE('Q','3','X','T')
  49. #define kQ3XExtensionMacFileType            Q3_OBJECT_TYPE('s','h','l','b')
  50.  
  51. #endif /* OS_MACINTOSH */
  52.  
  53.  
  54. /******************************************************************************
  55.  **                                                                             **
  56.  **                                    Macros                                      **
  57.  **                                                                             **
  58.  *****************************************************************************/
  59.  
  60. #define Q3XObjectClassVersion(major, minor)        \
  61.     (unsigned long) (((major) << 16) | (minor))
  62.  
  63.  
  64. /******************************************************************************
  65.  **                                                                             **
  66.  **                                Object Method types                              **
  67.  **                                                                             **
  68.  *****************************************************************************/
  69.  
  70. #define kQ3XMethodTypeObjectClassVersion        Q3_METHOD_TYPE('v','r','s','n')
  71. typedef unsigned long    TQ3XObjectClassVersion;
  72.  
  73. #define kQ3XMethodTypeObjectClassRegister        Q3_METHOD_TYPE('r','g','s','t')
  74. typedef TQ3Status (*TQ3XObjectClassRegisterMethod)(
  75.     TQ3XObjectClass        objectClass,
  76.     void                *classPrivate);
  77.  
  78. #define kQ3XMethodTypeObjectClassReplace        Q3_METHOD_TYPE('r','g','r','p')
  79. typedef void (*TQ3XObjectClassReplaceMethod)(
  80.     TQ3XObjectClass        oldObjectClass,
  81.     void                *oldClassPrivate,
  82.     TQ3XObjectClass        newObjectClass,
  83.     void                *newClassPrivate);
  84.  
  85. #define kQ3XMethodTypeObjectClassUnregister        Q3_METHOD_TYPE('u','n','r','g')
  86. typedef void (*TQ3XObjectClassUnregisterMethod)(
  87.     TQ3XObjectClass        objectClass,
  88.     void                *classPrivate);
  89.     
  90. #define kQ3XMethodTypeObjectNew                    Q3_METHOD_TYPE('n','e','w','o')
  91. typedef TQ3Status (*TQ3XObjectNewMethod)(
  92.     TQ3Object            object,
  93.     void                *privateData,        
  94.     void                *parameters);        
  95.  
  96. #define kQ3XMethodTypeObjectDelete                Q3_METHOD_TYPE('d','l','t','e')
  97. typedef void (*TQ3XObjectDeleteMethod)(
  98.     TQ3Object            object,
  99.     void                *privateData);
  100.     
  101. #define kQ3XMethodTypeObjectPeek                Q3_METHOD_TYPE('p','e','e','k')
  102. typedef void *(*TQ3XObjectPeekMethod)(
  103.     TQ3Object            object);
  104.  
  105. #define kQ3XMethodTypeObjectCopy                Q3_METHOD_TYPE('c','p','y','o')
  106. typedef TQ3Status (*TQ3XObjectCopyMethod)(
  107.     TQ3Object            fromObject,
  108.     const void            *fromPrivateData,
  109.     TQ3Object            toObject,
  110.     const void            *toPrivateData);
  111.  
  112. /* TODO: Move these to QD3DIO.h */
  113. #define kQ3XMethodTypeObjectRead                Q3_METHOD_TYPE('r','e','a','d')
  114. typedef TQ3Object (*TQ3XObjectReadMethod)(
  115.     TQ3FileObject        file);
  116.  
  117. typedef TQ3Status (*TQ3XObjectTraverseDataMethod)(
  118.     TQ3Object            object,
  119.     void                *data,
  120.     TQ3ViewObject        view);
  121.  
  122. #define kQ3XMethodTypeObjectAttach                Q3_METHOD_TYPE('a','t','t','c')
  123. typedef TQ3Status (*TQ3XObjectAttachMethod)(
  124.     TQ3Object            childObject,
  125.     TQ3Object            parentObject);
  126.  
  127.  
  128. /******************************************************************************
  129.  **                                                                             **
  130.  **                            Object Hierarchy Registration                      **
  131.  **                                                                             **
  132.  *****************************************************************************/
  133.  
  134. /*
  135.  *    Q3XObjectHierarchy_RegisterClass
  136.  *    
  137.  *    Register an object class in the QuickDraw 3D hierarchy.
  138.  *    
  139.  *    parentType            - an existing type in the hierarchy, or 0 to subclass
  140.  *                            TQ3Object
  141.  *    objectType            - the new object class type, used in the binary 
  142.  *                        metafile
  143.  *    objectName            - the new object name, used in the text metafile
  144.  *    metaHandler            - a TQ3XMetaHandler (may be NULL for some classes) 
  145.  *                          which returns non-virtual methods
  146.  *    virtualMetaHandler    - a TQ3XMetaHandler (may be NULL as well) which returns
  147.  *                            virtual methods a child would inherit
  148.  *    methodsSize            - the size of the class data needed (see 
  149.  *                            GetClassPrivate calls below)
  150.  *    instanceSize        - the size of the object instance data needed (see 
  151.  *                            GetPrivate calls below)
  152.  */
  153. QD3D_EXPORT TQ3XObjectClass Q3XObjectHierarchy_RegisterClass(
  154.     TQ3ObjectType            parentType,
  155.     TQ3ObjectType            objectType,
  156.     char                    *objectName,
  157.     TQ3XMetaHandler            metaHandler,
  158.     TQ3XMetaHandler            virtualMetaHandler,
  159.     unsigned long            methodsSize,
  160.     unsigned long            instanceSize);
  161.  
  162. /*
  163.  *    Q3XObjectHierarchy_UnregisterClass
  164.  *    
  165.  *    Identical to Q3XObjectClass_Unregister. Returns kQ3Failure if the 
  166.  *    objectClass still has objects around; the class remains registered.
  167.  */
  168. QD3D_EXPORT TQ3Status Q3XObjectHierarchy_UnregisterClass(
  169.     TQ3XObjectClass            objectClass);
  170.  
  171. /*
  172.  *    Q3XObjectHierarchy_GetMethod
  173.  *    
  174.  *    For use in TQ3XObjectClassRegisterMethod call
  175.  */
  176. QD3D_EXPORT TQ3XFunctionPointer Q3XObjectHierarchy_GetMethod(
  177.     TQ3XObjectClass            objectClass,
  178.     TQ3XMethodType            methodType);
  179.  
  180. /*
  181.  *    Q3XObjectHierarchy_NewObject
  182.  *    
  183.  *    To create a new object. Parameters is passed into the 
  184.  *    TQ3XObjectNewMethod as the "parameters" parameter.
  185.  */
  186. QD3D_EXPORT TQ3Object Q3XObjectHierarchy_NewObject(
  187.     TQ3XObjectClass            objectClass,
  188.     void                    *parameters);
  189.  
  190. /*
  191.  *    Q3XObjectClass_GetLeafType
  192.  *    
  193.  *    Return the leaf type of a class.
  194.  */
  195. QD3D_EXPORT TQ3ObjectType Q3XObjectClass_GetLeafType(
  196.     TQ3XObjectClass            objectClass);
  197.  
  198. /*
  199.  *    Q3XObjectClass_GetSubClassType
  200.  *    Q3XObject_GetSubClassType
  201.  *    
  202.  *    Return the subclass type of "targetObject" or "targetObjectClass"
  203.  *    
  204.  *    Used for "GetType" calls for a particular class. e.g.
  205.  *    
  206.  *    Q3Geometry_GetType would be implemented:
  207.  *    
  208.  *        TQ3ObjectType Q3Geometry_GetType(
  209.  *            TQ3GeometryObject            object)
  210.  *        {
  211.  *            return Q3XObjectHierarchy_GetObjectType(gGeometryClass, object);
  212.  *        }
  213.  *
  214.  *    where gGeometryClass is the geometry object class, and "object" is
  215.  *    a subclass of the geometry class. The type returned is the "direct"
  216.  *    subclass type of the geometry.
  217.  */ 
  218. QD3D_EXPORT TQ3ObjectType Q3XObjectClass_GetSubClassType(
  219.     TQ3XObjectClass            objectClass,
  220.     TQ3XObjectClass            targetObjectClass);
  221.  
  222. QD3D_EXPORT TQ3ObjectType Q3XObject_GetSubClassType(
  223.     TQ3XObjectClass            objectClass,
  224.     TQ3Object                targetObject);
  225.  
  226. QD3D_EXPORT TQ3XObjectClass Q3XObjectHierarchy_FindClassByType(
  227.     TQ3ObjectType            type);
  228.  
  229. /*
  230.  *    Q3XObject_GetClassPrivate
  231.  *    Q3XObjectClass_GetClassPrivate
  232.  *    
  233.  *    Return pointers to private class data, a block of methodsSize bytes, from
  234.  *    the Q3XObjectHierarchy_RegisterClass call.
  235.  *    
  236.  *    If methodsSize was zero, NULL is always returned.
  237.  */
  238. QD3D_EXPORT void *Q3XObject_GetClassPrivate(
  239.     TQ3XObjectClass            objectClass,
  240.     TQ3Object                targetObject);
  241.  
  242. QD3D_EXPORT void *Q3XObjectClass_GetClassPrivate(
  243.     TQ3XObjectClass            objectClass,
  244.     TQ3XObjectClass            targetObjectClass);
  245.  
  246. /*
  247.  *    Q3XObject_GetPrivate
  248.  *    
  249.  *    Return a pointer to private instance data, a block of instanceSize bytes, 
  250.  *    from the Q3XObjectHierarchy_RegisterClass call.
  251.  *    
  252.  *    If instanceSize was zero, NULL is always returned.
  253.  */
  254. QD3D_EXPORT void *Q3XObject_GetPrivate(
  255.     TQ3XObjectClass            objectClass,
  256.     TQ3Object                targetObject);
  257.  
  258. /*
  259.  * Return a pointer to an object's private data structure.
  260.  */
  261. QD3D_EXPORT void *Q3XObject_Peek(
  262.     TQ3Object         object);
  263.     
  264. /*
  265.  * Return the "TQ3XObjectClass" of an object
  266.  */
  267. QD3D_EXPORT TQ3XObjectClass Q3XObject_GetClass(
  268.     TQ3Object         object);
  269.     
  270.     
  271. /******************************************************************************
  272.  **                                                                             **
  273.  **                                Posting Errors                                  **
  274.  **                                                                             **
  275.  **            You may only call these functions from within an extension         **
  276.  **                                                                             **
  277.  *****************************************************************************/
  278.  
  279. /*
  280.  *    Q3XError_Post
  281.  *    
  282.  *    Post a QuickDraw 3D Error.
  283.  */
  284. QD3D_EXPORT void Q3XError_Post(
  285.     TQ3Error                error);
  286.  
  287. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  288.  
  289. /*
  290.  *    Q3XMacintoshError_Post
  291.  *    
  292.  *    Post the QuickDraw 3D Error, kQ3ErrorMacintoshError, and the Macintosh
  293.  *    OSErr macOSErr. (Retrieved with Q3MacintoshError_Get)
  294.  */
  295. QD3D_EXPORT void Q3XMacintoshError_Post(
  296.     OSErr                    macOSErr);
  297.  
  298. #endif  /*  OS_MACINTOSH  */
  299.  
  300.  
  301. #ifdef __cplusplus
  302. }
  303. #endif  /* __cplusplus  */
  304.  
  305. #if defined(__MWERKS__)
  306.     #pragma enumsalwaysint reset
  307. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  308.     #pragma options enum=reset
  309. #endif
  310.  
  311. #endif  /* QD3DExtension_h  */
  312.